iT邦幫忙

2024 iThome 鐵人賽

DAY 22
0
AI/ ML & Data

Let's Go To The AI Party!系列 第 23

Day22-隨機森林

  • 分享至 

  • xImage
  •  

隨機森林(Random Forest)

一種機器學習演算法,由 多棵決策樹(Decision Tree) 組成,也是一種 監督學習(Supervised Learning) 演算法,可以應用 分類(Classification)回歸(Regression) 任務

基本原理

核心思想是 集成學習(Ensemble Learning),在隨機森林中,每棵決策樹都是一個學習器,最終預測結果是通過對所有決策樹的預測結果進行投票來獲得的

https://ithelp.ithome.com.tw/upload/images/20240817/20163257jfC0psT8J2.png
圖片來源:(https://www.researchgate.net/figure/Random-Forest-as-a-combination-of-multiple-Decision-Trees_fig3_336436894)

隨機森林參數

  • 樹的數量:決策樹數量越多,模型準確度通常會越高,但計算成本也會增加
  • 每棵樹的最大深度:控制決策樹複雜度,避免過擬合
  • 每個節點最少樣本數:控制葉節點純度,避免過擬合
  • 特徵隨機選擇的數量:控制每棵決策樹使用特徵數量

https://ithelp.ithome.com.tw/upload/images/20240817/20163257vsMWCAPx0m.png
圖片來源:Random Forest

隨機森林工作原理

隨機抽樣

  • 樣本抽樣:每棵決策樹都從原始訓練數據集中隨機抽取一部分樣本進行訓練,且允許重複抽樣(有放回抽樣)。這使得每棵樹看到的數據略有不同,增加了模型的多樣性
  • 特徵抽樣:在構建每棵決策樹時,並不是使用所有的特徵,而是隨機選取一部分特徵進行分裂。這進一步增加了模型的隨機性

決策樹生長

每棵決策樹都按照傳統決策樹的生長方式進行訓練,直到滿足預定的停止條件(樹的深度、葉節點的樣本數量)

投票預測

  • 當有新的數據需要預測時,將其輸入到每棵決策樹中,每棵樹都會給出一個預測結果
  • 對於分類問題,採用投票的方式,即選擇出現次數最多的類別作為最終的預測結果
  • 對於迴歸問題,則取所有決策樹預測結果的平均值作為最終預測

隨機森林優缺點

  • 降低過擬合(Overfitting) 風險:決策樹容易過擬合,而隨機森林通過集成多棵決策樹,可以降低過擬合風險
  • 提高準確度:通常可以比單個決策樹獲得更高的準確度
  • 能夠處理高維度數據:能夠處理高維度數據,而不會出現 維度災難(Curse of Dimensionality) 問題
  • 易於解釋:隨機森林決策過程相對容易解釋,因此是一種可解釋的機器學習模型
  • 計算量大:訓練隨機森林模型需要大量的計算資源
  • 對異常值敏感:隨機森林對異常值敏感,可能會導致模型性能下降

隨機森林應用

分類問題:信用評級、垃圾郵件分類、疾病診斷
迴歸問題:房價預測、股票價格預測
異常檢測:網路入侵檢測、欺詐檢測
金融風控:預測信用違約、欺詐行為
醫學診斷:疾病診斷、預測患者生存期
推薦系統:推薦商品、內容
圖像識別:物體識別、圖像分類
特徵重要性評估:根據每棵決策樹中特徵的重要性,可以評估各個特徵對預測結果的貢獻程度

隨機森林程式碼(Python-Scikit-learn)

from sklearn.ensemble import RandomForestClassifier

# 訓練數據
X = [[1, 2], [3, 4], [5, 6]]
y = [0, 1, 2]

# 訓練模型
model = RandomForestClassifier()
model.fit(X, y)

# 預測新數據
new_data = [[7, 8]]
predicted_labels = model.predict(new_data)
print(predicted_labels)

程式碼中,使用 RandomForestClassifier 類別訓練一個隨機森林模型 fit()方法 訓練模型,predict()方法 預測新數據

from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_iris

# 載入鳶尾花資料集
iris = load_iris()
X = iris.data
y = iris.target

# 建立隨機森林分類器
clf = RandomForestClassifier(n_estimators=100)

# 訓練模型
clf.fit(X, y)

# 預測新樣本
new_data = [[5.1, 3.5, 1.4, 0.2]]
predicted = clf.predict(new_data)
print(predicted)
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_iris

# 載入鳶尾花數據集
iris = load_iris()
X = iris.data
y = iris.target

# 創建隨機森林分類器
clf = RandomForestClassifier(n_estimators=100)

# 訓練模型
clf.fit(X, y)

# 進行預測
y_pred = clf.predict(X)
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split

# 載入鳶尾花資料集
iris = load_iris()
X = iris.data
y = iris.target

# 分割訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 建立隨機森林分類器
clf = RandomForestClassifier(n_estimators=100, random_state=42)

# 訓練模型
clf.fit(X_train, y_train)

# 進行預測
y_pred = clf.predict(X_test)

# 評估模型性能
from sklearn.metrics import accuracy_score
print("Accuracy:", accuracy_score(y_test, y_pred))

結論

隨機森林是一種強大而靈活的機器學習演算法,在眾多領域都有廣泛的應用。它的優點包括高準確度、能處理高維資料、能評估變數的重要性等,在實際應用中取得了廣泛的成功。然而,隨機森林也有一些缺點,例如:模型較為複雜,調參較為繁瑣


上一篇
Day21-決策樹
下一篇
Day23-支持向量機
系列文
Let's Go To The AI Party!31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言